﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using snat.model;
using System.Collections.ObjectModel;

namespace gui {

    // GUI Delegates used cross classes
    public delegate void guiFreezeGraphLayoutEvent();
    public delegate void guiFixLayoutEvent();
    public delegate void guiRelayoutEvent();
    public delegate void guiCompactLayoutEvent();
    public delegate void guiExpandLayoutEvent();
    public delegate void guiOnConsoleWriteEvent();
    public delegate void guiGraphNodeSelectedEvent(ClusterNode b);
    public delegate void guiNodeListSelectionEvent();
    public delegate void guiNodeQueryFinishedEvent();
    public delegate void guiBuiltMessageListEvent(BaseNode n, ObservableCollection<MessageItem> l);
    public delegate void guiAlgorithmsListBuiltEvent(ObservableCollection<AlgorithmItem> l);
    public delegate void guiLoadingBoxStatusUpdate(string str);

    // Menu Related Events
    public delegate void guiOnAlgorithmCustomWrite();
    public delegate void guiOnAlgorithmCustomRead();
    public delegate void guiOnAlgorithmConsoleSave();
    public delegate void guiSaveJPGEvent(string filename);
    public delegate void guiSaveChartJPGEvent(string filename);
    public delegate void guiSaveChartCSVEvent(string filename);

    public delegate void guiOnConnectingEvent();
    public delegate void guiOnConnectedEvent();
    public delegate void guiTapeLoadingEvent();
    public delegate void guiTapeLoadedEvent();
    public delegate void guiOnFinishedProcessingEvent();
    public delegate void guiOnErrorEvent();
    public delegate void guiResetEvent();

    // Required to pass nodes and edges between Connect and ViewModel
    public delegate void nodeDelegate(ClusterNode b);
    public delegate void edgeDelegate(Edge e);

    // Required to ensure consistency between different instances of Play Control
    public delegate void pcRunning();
    public delegate void pcSkipToEnd();
    public delegate void pcReady();
    public delegate void pcPaused();
    public delegate void pcFinished();
    public delegate void pcStepChanged(decimal steps);
    public delegate void pcStepTypeChanged(int index);
}
